/**
 * @file x264_wrapper.h
 * Copyright (c) Gaaagaa. All rights reserved.
 * 
 * @author  : Gaaagaa
 * @date    : 2020-03-20
 * @version : 1.0.0.0
 * @brief   : 封装 libx264 API，实现 H.264 视频编码操作的工具类。
 */

#ifndef __X264_WRAPPER_H__
#define __X264_WRAPPER_H__

#include "xtypes.h"

////////////////////////////////////////////////////////////////////////////////

/**
 * @class x264_encoder_t
 * @brief 实现 H.264 视频编码操作的工具类。
 */
class x264_encoder_t
{
    // common data types
public:
    /**
     * @enum  xerrno_table_t
     * @brief 错误码表。
     */
    typedef enum xerrno_table_t
    {
    } xerrno_table_t;

    // common invoking
public:
    /**********************************************************/
    /**
     * @brief 获取 xerrno_table_t 中的错误码名称。
     */
    static x_cstring_t xerrno_name(x_int32_t xit_errno)
    {
        x_cstring_t xszt_name = "";

        switch (xit_errno)
        {
        default: break;
        }

        return xszt_name;
    }

    /**********************************************************/
    /**
     * @brief 获取 xerrno_table_t 中的错误码名称。
     */
    static x_cstring_t xerrno_name(x_errno_t xerr_no)
    {
        return xerrno_name(XERR_HINO(xerr_no));
    }

    // constructor/destuctor
public:
    x264_encoder_t(void);
    ~x264_encoder_t(void);

    // public interfaces
public:
    /**********************************************************/
    /**
     * @brief 打开编码器对象。
     * 
     * @param [in ]  : 。
     * 
     * @return x_errno_t : 错误码。
     * @retval X_ERR_OK, 操作成功。
     * @retval XERR_HINO(xerr_no)，参看 xerrno_table_t 相关枚举值。
     * @retval XERR_LONO(xerr_no)，所引用的模块返回的错误码值。
     */
    x_errno_t open(x_uint32_t xut_config);

    /**********************************************************/
    /**
     * @brief 关闭编码器对象。
     */
    x_void_t close(void);

    /**********************************************************/
    /**
     * @brief 判断编码器对象是否已经打开。
     */
    inline x_bool_t is_open(void) const
    {
        return (X_NULL != m_xht_encoder);
    }

    // data members
protected:
    x_handle_t    m_xht_encoder;   ///< 编码器对象句柄

};

////////////////////////////////////////////////////////////////////////////////

#endif // __X264_WRAPPER_H__

